///*******************************************************************************
// * Copyright (c) 2007, 2008 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *     Michael Krkoska - initial API and implementation (bug 188333)
// *******************************************************************************/
//package org.eclipse.jface.tests.viewers.interactive;
//
//import java.text.DecimalFormat;
//import java.text.MessageFormat;
//
//import org.eclipse.jface.preference.JFacePreferences;
//import org.eclipse.jface.resource.JFaceResources;
//import org.eclipse.jface.viewers.IStructuredContentProvider;
//import org.eclipse.jface.viewers.StyledCellLabelProvider;
//import org.eclipse.jface.viewers.StyledString;
//import org.eclipse.jface.viewers.TableViewer;
//import org.eclipse.jface.viewers.Viewer;
//import org.eclipse.jface.viewers.ViewerCell;
//import org.eclipse.jface.viewers.StyledString.Styler;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.events.SelectionAdapter;
//import org.eclipse.swt.events.SelectionEvent;
//import org.eclipse.swt.graphics.Font;
//import org.eclipse.swt.graphics.FontData;
//import org.eclipse.swt.graphics.Image;
//import org.eclipse.swt.graphics.RGB;
//import org.eclipse.swt.graphics.TextStyle;
//import org.eclipse.swt.layout.GridData;
//import org.eclipse.swt.layout.GridLayout;
//import org.eclipse.swt.widgets.Button;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Display;
//import org.eclipse.swt.widgets.Event;
//import org.eclipse.swt.widgets.Label;
//import org.eclipse.swt.widgets.Shell;
//
///**
// * Using a {@link StyledCellLabelProvider} on table viewer.
// */
//
//public class StyledCellLabelProviderTests {
//
//	private static int IMAGE_SIZE= 16;
//
//	private static Image IMAGE1;
//	private static Image IMAGE2;
//
//	public static void main(String[] args) {
//
//		Display display = new Display();
//
//		JFaceResources.getColorRegistry().put(JFacePreferences.COUNTER_COLOR, new RGB(0,127,174));
//
//		IMAGE1= new Image(display, display.getSystemImage(SWT.ICON_WARNING).getImageData().scaledTo(IMAGE_SIZE, IMAGE_SIZE));
//		IMAGE2= new Image(display, display.getSystemImage(SWT.ICON_ERROR).getImageData().scaledTo(IMAGE_SIZE, IMAGE_SIZE));
//
//		Shell shell= new Shell(display , SWT.CLOSE | SWT.RESIZE);
//		shell.setSize(400, 600);
//		shell.setLayout(new GridLayout(1, false));
//
//		StyledCellLabelProviderTests example= new StyledCellLabelProviderTests();
//		Control composite= example.createPartControl(shell);
//		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
//
//		shell.open();
//
//		while (!shell.isDisposed()) {
//			if (!display.readAndDispatch()) {
//				display.sleep();
//			}
//		}
//		display.dispose();
//	}
//
//	protected boolean useBold;
//
//	public StyledCellLabelProviderTests() {
//	}
//
//	public Composite createPartControl(Composite parent) {
//		Composite composite= new Composite(parent, SWT.NONE);
//
//		composite.setLayout(new GridLayout(1, true));
//
//		final Label label= new Label(composite, SWT.NONE);
//		label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
//		label.setText("Operations per second: xxxxx"); //$NON-NLS-1$
//
//		final Runnable[] operation = new Runnable[1];
//
//		final Button timeButton = new Button(composite, SWT.CHECK);
//		timeButton.setText("Time");
//		timeButton.addSelectionListener(new SelectionAdapter(){
//			public void widgetSelected(SelectionEvent e) {
//				setTimer(timeButton.getDisplay(), timeButton.getSelection(), operation, label);
//			}
//		});
//
//		final Button stylingButton = new Button(composite, SWT.CHECK);
//		stylingButton.setText("enable styling");
//		stylingButton.setSelection(true);
//
//		final Button boldButton = new Button(composite, SWT.CHECK);
//		boldButton.setText("use bold");
//
//		final TableViewer tableViewer= new TableViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
//
//		boldButton.addSelectionListener(new SelectionAdapter(){
//			public void widgetSelected(SelectionEvent e) {
//				useBold = boldButton.getSelection();
//				tableViewer.refresh();
//			}
//		});
//
//		operation[0] = new Runnable(){
//			public void run() {
//				tableViewer.refresh();
//			}
//		};
//
//		FontData[] boldFontData= getModifiedFontData(tableViewer.getTable().getFont().getFontData(), SWT.BOLD);
//
//		Font boldFont = new Font(Display.getCurrent(), boldFontData);
//		final ExampleLabelProvider labelProvider= new ExampleLabelProvider(boldFont);
//		TestContentProvider contentProvider= new TestContentProvider();
//
//		tableViewer.setContentProvider(contentProvider);
//		tableViewer.setLabelProvider(labelProvider);
//
//		stylingButton.addSelectionListener(new SelectionAdapter(){
//			public void widgetSelected(SelectionEvent e) {
//				labelProvider.setOwnerDrawEnabled(stylingButton.getSelection());
//				tableViewer.refresh();
//			}
//		});
//
//
//		GridData data= new GridData(GridData.FILL, GridData.FILL, true, true);
//		tableViewer.getControl().setLayoutData(data);
//		tableViewer.setInput(new Object());
//
//		return composite;
//	}
//
//	boolean timerOn = false;
//	long startTime;
//	int numOperations;
//	DecimalFormat decimalFormat = new DecimalFormat("##.#");
//
//	protected void setTimer(final Display display, boolean selection, final Runnable[] operation, final Label resultLabel) {
//		timerOn = selection;
//		if (timerOn) {
//			startTime = System.currentTimeMillis();
//			numOperations = 0;
//			display.asyncExec(new Runnable() {
//				public void run() {
//					if (display.isDisposed() || resultLabel.isDisposed()) {
//						return;
//					}
//					if (operation[0] != null) {
//						operation[0].run();
//					}
//					numOperations++;
//					long currentTime = System.currentTimeMillis();
//					long elapsedTime = currentTime - startTime;
//					if (elapsedTime >= 1000) {
//						double timePerOperation = elapsedTime / 1000.0 / numOperations;
//						double operationsPerSecond = 1.0/timePerOperation;
//						resultLabel.setText("Operations per second: " + decimalFormat.format(operationsPerSecond));
//						numOperations = 0;
//						startTime = System.currentTimeMillis();
//					}
//					if (timerOn) {
//						display.asyncExec(this);
//					}
//				}
//			});
//		} else {
//			resultLabel.setText("Operations per second: xxxx");
//		}
//	}
//
//	private static FontData[] getModifiedFontData(FontData[] originalData, int additionalStyle) {
//		FontData[] styleData = new FontData[originalData.length];
//		for (int i = 0; i < styleData.length; i++) {
//			FontData base = originalData[i];
//			styleData[i] = new FontData(base.getName(), base.getHeight(), base.getStyle() | additionalStyle);
//		}
//       	return styleData;
//    }
//
//	private class ExampleLabelProvider extends StyledCellLabelProvider {
//
//		private final Styler fBoldStyler;
//
//		public ExampleLabelProvider(final Font boldFont) {
//			fBoldStyler= new Styler() {
//				public void applyStyles(TextStyle textStyle) {
//					textStyle.font= boldFont;
//				}
//			};
//		}
//
//		public void update(ViewerCell cell) {
//			Object element= cell.getElement();
//
//			if (element instanceof File) {
//				File file= (File) element;
//
//				Styler style= file.isDirectory() && useBold ? fBoldStyler: null;
//				StyledString styledString= new StyledString(file.getName(), style);
//				String decoration = MessageFormat.format(" ({0} bytes)", new Object[] { new Long(file.length()) }); //$NON-NLS-1$
//				styledString.append(decoration, StyledString.COUNTER_STYLER);
//
//				cell.setText(styledString.toString());
//				cell.setStyleRanges(styledString.getStyleRanges());
//
//				if (file.isDirectory()) {
//					cell.setImage(IMAGE1);
//				} else {
//					cell.setImage(IMAGE2);
//				}
//			} else {
//				cell.setText("Unknown element"); //$NON-NLS-1$
//			}
//
//			super.update(cell);
//		}
//
//		protected void measure(Event event, Object element) {
//			super.measure(event, element);
//		}
//	}
//
//	static class File {
//
//		private final String name;
//		private final int length;
//		private final boolean dir;
//
//		File(String name, int length, boolean dir) {
//			this.name = name;
//			this.length = length;
//			this.dir = dir;
//		}
//
//		public int length() {
//			return length;
//		}
//
//		public String getName() {
//			return name;
//		}
//
//		boolean isDirectory() {
//			return dir;
//		}
//
//	}
//
//	private static class TestContentProvider implements IStructuredContentProvider {
//
//		public Object[] getElements(Object element) {
//			return new File[]{
//					new File("asdfkjghfasdkjasdfhjgasdfkjhg", 2348, false),
//					new File("sdafkuyasdfkljh", 2348, false),
//					new File("asdklufhalsdkhlkjhnklj hlh", 2348, true),
//					new File("asdfasdf asdf ", 2348, false),
//					new File("fds sdf", 2348, true),
//					new File(" sdafuh lsdfahj alsdfk hl", 2348, false),
//					new File("sdfahj sdfajk hsdfjkh", 2348, false),
//					new File("sdafkja sdfjkh asdfkhj", 2348, false),
//					new File("sdfakj hasdfljkha sdfljkh sdfa", 348, true),
//					new File("hj ka g", 1334, true),
//					new File("asdfjk hsdfaljkh", 2348, false),
//					new File("asdh gasdflhg ", 3348, true),
//					new File("asd ghasdfkjg sdfkyug ", 4345, false),
//					new File("asdf hjasdflkjh sdfal", 5345, false),
//					new File("asdlfuh afsdhjg fdsalhj", 6648, false),
//					new File("uiy viuh vhj v", 7448, true),
//					new File("sdfauighsdvpyu ghasjkn", 8848, true),
//					new File("asduih cuia ;nac", 9548, false),
//					new File("chju kljhuuklh jk;", 348, false),
//					new File("cdailukhu l;hj .n", 448, false),
//					new File("auihy akl;h l;j", 2348, false),
//					new File("caiugh j l;kjlh jcd", 2328, true),
//					new File("auio;h jkh lhjl h ljjhbvj", 2348, true),
//					new File("ajklkja kj lkjh jklh ", 2248, false),
//					new File("asdfkjghfasdkjasdfhjgasdfkjhg", 2348, true),
//					new File("sdafkuyasdfkljh", 2348, false),
//					new File("asdklufhalsdkhlkjhnklj hlh", 2348, true),
//					new File("asdfasdf asdf ", 2348, false),
//					new File("fds sdf", 2348, true),
//					new File(" sdafuh lsdfahj alsdfk hl", 2348, true),
//					new File("sdfahj sdfajk hsdfjkh", 2348, false),
//					new File("sdafkja sdfjkh asdfkhj", 2348, true),
//					new File("sdfakj hasdfljkha sdfljkh sdfa", 348, true),
//					new File("hj ka g", 1334, false),
//					new File("asdfjk hsdfaljkh", 2348, false),
//					new File("asdh gasdflhg ", 3348, true),
//					new File("asd ghasdfkjg sdfkyug ", 4345, true),
//					new File("asdf hjasdflkjh sdfal", 5345, true),
//					new File("asdlfuh afsdhjg fdsalhj", 6648, false),
//					new File("uiy viuh vhj v", 7448, false),
//					new File("sdfauighsdvpyu ghasjkn", 8848, true),
//					new File("asduih cuia ;nac", 9548, false),
//					new File("chju kljhuuklh jk;", 348, true),
//					new File("cdailukhu l;hj .n", 448, true),
//					new File("auihy akl;h l;j", 2348, false),
//					new File("caiugh j l;kjlh jcd", 2328, true),
//					new File("auio;h jkh lhjl h ljjhbvj", 2348, false),
//					new File("ajklkja kj lkjh jklh ", 2248, true),
//			};
//		}
//
//		public void dispose() {
//		}
//
//		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
//		}
//	}
//}
